home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / swtools / trubasic / rolldemos / demos / tb / hilbert.tru < prev    next >
Encoding:
Text File  |  1994-08-02  |  1.2 KB  |  54 lines

  1. ! Space filling curve, by David Hilbert
  2. !
  3. CALL tw_wset_title(0,"Hilbert")
  4. CALL tw_wset_size(0,750,750)
  5.  
  6. ! we could change the background color mix here
  7. ! but it might affect the backgrounds of other programs.
  8. !SET COLOR MIX(0) .3,.3,.3
  9.  
  10. SET MODE "graphics"
  11. ASK PIXELS px,py
  12. SET WINDOW 0,px-1,0,py-1             ! make pixels work nicely
  13. LET xc = 2^(Int(Log2(px)))
  14. LET yc = 2^(Int(Log2(py)))
  15. LET step  = Min(xc,yc)/2
  16. LET xbase = (px/2)-step
  17. LET ybase = (py/2)-step              ! center the picture
  18.  
  19. DO while step > 2
  20.    LET x = xbase + step/2
  21.    LET y = ybase + step/2
  22.    LET level = level + 1
  23.    IF end data then RESTORE
  24.    READ color$
  25.    SET COLOR color$
  26.    CALL hilbert (0,step,step,0,level)
  27.    PLOT x,y
  28.    LET step = step / 2
  29. LOOP
  30.  
  31. DATA magenta,white,cyan
  32.  
  33. SUB draw (xs, ys)
  34.     PLOT x,y;
  35.     LET x = x + xs
  36.     LET y = y + ys
  37. END SUB
  38.  
  39. SUB hilbert (xs, ys, x2, y2, lev)
  40.     get mouse tmp,tmp2,state
  41.     if state<>0 or key input then stop
  42.  
  43.     IF lev = 0 then EXIT SUB
  44.     CALL hilbert (x2, y2, xs, ys, lev-1)
  45.     CALL draw (xs, ys)
  46.     CALL hilbert (xs,ys,x2,y2,lev-1)
  47.     CALL draw (x2,y2)
  48.     CALL hilbert (xs,ys,x2,y2,lev-1)
  49.     CALL draw (-xs,-ys)
  50.     CALL hilbert (-x2,-y2,-xs,-ys,lev-1)
  51. END SUB
  52. pause 5
  53. END
  54.